| @@ -0,0 +1,15 @@ | ||
| 1 | +class @ScenarioShowPage | |
| 2 | + constructor:() -> | |
| 3 | + @changeModalText() | |
| 4 | + | |
| 5 | + changeModalText: () -> | |
| 6 | +    $('#disable-all').click -> | |
| 7 | +      $('#enable-disable-agents .modal-body').text 'Would you like to disable all agents?' | |
| 8 | +      $('#scenario-disabled-value').val 'true' | |
| 9 | +    $('#enable-all').click -> | |
| 10 | +      $('#enable-disable-agents .modal-body').text 'Would you like to enable all agents?' | |
| 11 | +      $('#scenario-disabled-value').val 'false' | |
| 12 | + | |
| 13 | +$ -> | |
| 14 | + Utils.registerPage(ScenarioShowPage, forPathsMatching: /^scenarios/) | |
| 15 | + | 
| @@ -95,6 +95,16 @@ class ScenariosController < ApplicationController | ||
| 95 | 95 | end | 
| 96 | 96 | end | 
| 97 | 97 |  | 
| 98 | + def enable_or_disable_all_agents | |
| 99 | + @scenario = current_user.scenarios.find(params[:id]) | |
| 100 | + | |
| 101 | + @scenario.agents.update_all(disabled: params[:scenario][:disabled] == 'true') | |
| 102 | + respond_to do |format| | |
| 103 | +      format.html { redirect_to @scenario, notice: 'The agents in this scenario have been successfully updated.' } | |
| 104 | +      format.json { head :no_content } | |
| 105 | + end | |
| 106 | + end | |
| 107 | + | |
| 98 | 108 | def destroy | 
| 99 | 109 | @scenario = current_user.scenarios.find(params[:id]) | 
| 100 | 110 | @scenario.destroy_with_mode(params[:mode]) | 
| @@ -0,0 +1,19 @@ | ||
| 1 | +<div id="enable-disable-agents" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="enableAgentLabel" aria-hidden="true"> | |
| 2 | + <div class="modal-dialog modal-sm"> | |
| 3 | + <div class="modal-content"> | |
| 4 | + <div class="modal-header"> | |
| 5 | + <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button> | |
| 6 | + <h4 class="modal-title">Confirm</h4> | |
| 7 | + </div> | |
| 8 | + <div class="modal-body"> | |
| 9 | + </div> | |
| 10 | + <div class="modal-footer"> | |
| 11 | + <%= form_for(scenario, as: :scenario, url: enable_or_disable_all_agents_scenario_path(scenario), method: 'PUT') do |f| %> | |
| 12 | + <%= f.hidden_field :disabled, value: '', id: "scenario-disabled-value" %> | |
| 13 | + <%= f.button 'No', class: 'btn btn-default', 'data-dismiss' => 'modal' %> | |
| 14 | + <%= f.submit 'Yes', class: 'btn btn-primary' %> | |
| 15 | + <% end %> | |
| 16 | + </div> | |
| 17 | + </div> | |
| 18 | + </div> | |
| 19 | +</div> | 
| @@ -24,8 +24,11 @@ | ||
| 24 | 24 | <% end %> | 
| 25 | 25 |          <%= link_to icon_tag('glyphicon-share-alt') + ' Share', share_scenario_path(@scenario), class: "btn btn-default" %> | 
| 26 | 26 |          <%= link_to icon_tag('glyphicon-trash') + ' Delete', '#', data: { toggle: 'modal', target: "#confirm-scenario-deletion-#{@scenario.id}"}, class: "btn btn-default" %> | 
| 27 | +        <%= link_to icon_tag('glyphicon-play') + 'Enable all Agents', '#', data: { toggle: 'modal', target: "#enable-disable-agents"}, class: "btn btn-default", id: "enable-all" %> | |
| 28 | +        <%= link_to icon_tag('glyphicon-pause') + 'Disable all Agents', '#', data: { toggle: 'modal', target: "#enable-disable-agents"}, class: "btn btn-default", id: "disable-all" %> | |
| 27 | 29 | </div> | 
| 28 | 30 | </div> | 
| 29 | 31 | </div> | 
| 30 | 32 | </div> | 
| 31 | 33 | <%= render 'scenarios/confirm_deletion_modal', scenario: @scenario %> | 
| 34 | +<%= render 'scenarios/enable_agents_modal', scenario: @scenario %> | 
| @@ -50,6 +50,7 @@ Huginn::Application.routes.draw do | ||
| 50 | 50 | member do | 
| 51 | 51 | get :share | 
| 52 | 52 | get :export | 
| 53 | + put :enable_or_disable_all_agents | |
| 53 | 54 | end | 
| 54 | 55 |  | 
| 55 | 56 | resource :diagram, :only => [:show] | 
| @@ -140,6 +140,15 @@ describe ScenariosController do | ||
| 140 | 140 | end | 
| 141 | 141 | end | 
| 142 | 142 |  | 
| 143 | + describe 'PUT enable_or_disable_all_agents' do | |
| 144 | + it 'updates disabled on all agents in a scenario for the current user' do | |
| 145 | +      @params = {"scenario"=>{"disabled"=>"true"}, "commit"=>"Yes", "id"=> scenarios(:bob_weather).id} | |
| 146 | + put :enable_or_disable_all_agents, @params | |
| 147 | + expect(agents(:bob_rain_notifier_agent).disabled).to eq(true) | |
| 148 | + expect(response).to redirect_to(scenario_path(scenarios(:bob_weather))) | |
| 149 | + end | |
| 150 | + end | |
| 151 | + | |
| 143 | 152 | describe "DELETE destroy" do | 
| 144 | 153 | it "destroys only Scenarios owned by the current user" do | 
| 145 | 154 |        expect { |